\par O postgresql é um SGBDOR(Sistema Gerenciado de Banco de Dados Objeto
Relacional) e hoje é um dos projetos open source mais antigos e com maior
atividade no mundo.

\subsection{História}
\par A história do postgresql começa em 1977 com um projeto chamado Ingres da
universidade de Berkeley na Califórnia que mais tarde passou a ser desenvolvido
comercialmente pela Relational Technologies/Ingres Corporation. Porém, em 1986 um
outro time liderado por Michael Stonebreaker de Berkeley continou os trabalhos
sobre o código fonte do Ingres com o objetivo de criar um sistema de banco de
dados objeto-relacional que ficou conhecido como Postgres. Mas, em 1996, o
projeto foi renomeado para PostgreSQL e um dos objetivos era torná-lo ainda
melhor\cite{pratical_postgresql}.

\subsection{Postgresql hoje}
\par Hoje em dia o PostgreSQL está na vanguarda dos bancos de dados, possuindo
muitos recursos avançados que em geral são posteriormente implementados em
produtos proprietários e que geralmente cobram preços proibitivos para a maioria
das empresas, em especial as pequenas e médias \cite{documentation_postgresql}.

\subsection{Recursos}
\label{postgresql_recursos}
\par O PostgreSQL possui muitos recursos que extendem suas funcionalidades, mas
não vamos citá-los neste trabalho por fugir de nosso foco. Mas existem um
recurso que é crucial para a implementação do SQM e por isso merece ser
mencionado neste ponto.

\par A maioria dos bancos de dados fornece suporte a \textit{stored procedures}, 
que são como pequenos programas que residem dentro do banco de dados e que 
podem executar as mais diversas funções. No PostgreSQL, o desenvolvedor pode 
criar estas procedures em diversas linguagens, dentre elas:

\begin{itemize}
    \item C;
    \item Python;
    \item Perl;
    \item Ruby;
    \item Java e outras.
\end{itemize}

\par Como o SQM é desenvolvido com a linguagem de programação Python, resolvemos incorporá-la 
ao banco de dados para escrever as procedures que são responsáveis pelo controle 
da quota de cada usuário.

\par Outro recurso que está disponível no postgresql e em outros bancos de dados 
são as \textit{triggers}. \textit{Triggers} são scripts que ficam monitorando 
uma determinada tabela a espera da ocorrência de um determinado evento
(\textit{INSERT, UPDATE, DELETE}) e quando este evento é detectado, uma 
\textit{stored procedure} pode ser invocada.

